A storage system typically comprises one or more storage devices into which information may be entered, and from which information may be obtained, as desired. The storage system includes a storage operating system that functionally organizes the system by, inter alia, invoking storage operations in support of a storage service implemented by the system. The storage system may be implemented in accordance with a variety of storage architectures including, but not limited to, a network-attached storage environment, a storage area network and a disk assembly directly attached to a host computer or client. The storage devices are typically disk drives organized as a disk array, wherein the term “disk” commonly describes a self-contained rotating magnetic media storage device. The term disk in this context is synonymous with hard disk drive (HDD) or direct access storage device (DASD).
The storage system may be further configured to operate according to a client/server model of information delivery to thereby allow many clients to access data containers stored on the system. The clients may be interconnected in a tightly-coupled configuration and organized as a compute cluster to facilitate load balancing and availability of services. In this model, each client may comprise an application executing on a computer, e.g., an application server, of the cluster that “connects” to the storage system over a computer network, such as a point-to-point link, shared local area network (LAN), wide area network (WAN), or virtual private network (VPN) implemented over a public network such as the Internet. The client may request the services of the storage system by issuing file-based and block-based protocol data access requests (in the form of packets) to the system over the network.
A virtual machine environment illustratively includes a computer, such as a client and/or storage system, executing a virtual machine operating system as well as one or more “guest” operating systems to essentially implement virtual machines on the client and/or storage system. Each guest operating system may comprise a conventional operating system, such as the Linux operating system, or a specialized operating system, such as a storage operating system. The virtual machine environment may also include a plurality of guest operating systems (or portions of a guest operating system) executing on each client within a virtual machine cluster environment, such as a virtualized compute cluster. In this latter environment, each client of the virtualized compute cluster may request the services of the storage system by accessing data containers stored on the system.
Over time, storage processing performance of the storage system may degrade as the data access request load originating from the compute cluster increases. A common solution to this problem is to interconnect a plurality of storage systems to provide a storage system cluster configured to service the clients of the compute cluster. Each storage system or node may be configured to service one or more volumes of disks, wherein each volume stores one or more data containers, such as files and logical units. Alternatively, the volumes serviced by the particular storage system node may be distributed among all of the nodes of the storage system cluster. This configuration distributes the data access requests, along with the processing resources needed to service such requests, among all of the storage system nodes, thereby reducing the individual processing load on each node.
Another solution is to provide a proxy caching system that includes a front-end proxy device having local storage, i.e., a “network cache”, coupled to a back-end storage system or node having remote storage. The network cache is configured to locally store (“cache”) certain data that may be used to service certain data access requests from the clients. In particular, data access requests directed to the cached data are serviced by the network cache, thereby offloading servicing of those requests from the storage system node while allowing the node to perform other useful storage processing functions.